\documentclass[10pt,a4paper]{article}
\usepackage{polski}
\usepackage[utf8]{inputenc}
\usepackage{a4wide}
\usepackage{fancyhdr}
\pagestyle{fancy}
\lhead{}
\chead{Specyfikacja wymagań stawianych oprogramowaniu}
\rhead{Strona \thepage}
\lfoot{}
\cfoot{}
\rfoot{}
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand\refname{Dokumenty}
\def\thesection{\arabic{section}.}
\def\thesubsection{\thesection\arabic{subsection}.}
\def\thesubsubsection{\thesubsection\arabic{subsubsection}.}

\title{{\LARGE\textbf{Projekt Kino}}\\ \large{Specyfikacja wymagań stawianych oprogramowaniu}}
\author{Paweł Chwała, Jacek Fiedorowicz, Piotr Kieć}

\begin{document}
\maketitle
\vfill
\nopagebreak
\begin{flushleft}
	\begin{tabular}{||c|c|c|l||}\hline
	\multicolumn{4}{|c|}{\textbf{Spis wersji}}\\ \hline\hline
	\textbf{Data} & \textbf{Wersja} & \textbf{Autor} & \textbf{Opis wprowadzonych zmian dokumentu}\\ \hline
7 grudnia 2009 & 2.0 & Piotr Kieć & utworzenie dokumentu, rozdziały 1., 2., 3. \\ \hline
27 grudnia 2009 & 2.1 & Jacek Fiedorowicz & rozdziały 4., 5., 6., 7. \\ \hline
4 stycznia 20010 & 2.2 & Paweł Chwała & rozdziały 8., 9., 10., 11. \\ \hline
	\end{tabular}
\end{flushleft}

\thispagestyle{empty}
\newpage
\thispagestyle{empty}
\tableofcontents
\newpage

\section{Wstęp}
\subsection{Cel}
Celem projektu \emph{Kino} jest stworzenie aplikacji wspomagającej pracę zarówno małego, jak i dużego kina. Amplikacja ma ułatwić pracę osobom zarządzającym kinem, a także dawać możliwość przeglądania klientom bieżącego repertuaru i ewentualnego zapisywania się na wybrane filmy.

\subsection{Zakres}
Aplikacja skierowana jest do szerokiego ogółu ludzi, którzy mają zamiar skorzystać z usługi danego kina, a także do właścicieli kina. Użykownicy mają dostęp do kina poprzez internet, więc z aplikacji można skorzystać praktycznie z każdego miejsca na ziemi.

\subsection{Odniesienia}

\subsection{Założenia i zależności}
 Aplikacja jest pisana w języku PHP i PostgreSQL, dlatego praktycznie nie ma znaczenia (są to narzędzia dostępne dla wielu systemów operacyjnych), na jakim systemie będzie uruchomiona, byle żeby serwer obsługiwał te technologie. Od użytkownika natomiast wymaga posiadania dostępu do internetu, a także przeglądarki internetowej, a wymaganie to jest spełnione w 90\% przypadków.

\section{Przegląd aktorów}
Aktorów dzielimy na poszczególne typy:
\begin{itemize}
 \item \emph{gość serwisu}
 \item \emph{klient}
 \item \emph{kasjer}
 \item \emph{dodawacz}
 \item \emph{administrator}
\end{itemize}

\subsection{Gość serwisu}
\emph{Gość serwisu} to dowolna osoba z zewnątrz. Nie jest ona zerestrowania w serwisie. \emph{Gość serwisu} może wykonywać poniższe czynności:
\begin{itemize}
 \item Przeglądać bieżący repertuar i ofertę wydarzeń
\end{itemize}

\subsection{Klient}
\emph{Klient} to dowolna zerejestrowana osoba w serwisie. \emph{Klient} może wykonywać poniższe czynności:
\begin{itemize}
 \item przeglądać bieżący repertuar i ofertę wydarzeń
 \item rezerwować seans
 \item zapisywać się na wybrane wydarzenie
\end{itemize}

\subsection{Kasjer}
\emph{Kasjer} to specjalny użytkownik serwisu, który może wykonywać poniższe czynności:
\begin{itemize}
 \item realizować zamówienie rezerwacji złożone przez \emph{Klienta}
 \item anulować rezerwacje
\end{itemize}

\subsection{Dodawacz}
\emph{Dodawacz} to specjalny użytkownik serwisu, który może wykonywać poniższe czynności:
\begin{itemize}
 \item dodawać nowy repertuar lub wydarzenie kulturalne
 \item aktualizować isniejący repertuar lub wydarzenie kulturalne
\end{itemize}


\subsection{Administrator}
\emph{Administrator} to specjalny użytkownik serwisu, który może wykonywać poniższe czynności:
\begin{itemize}
 \item definiować sale kinowe
 \item zarządzać użytkownikami
 \item nadawać uprawnienia użytkownikom 
\end{itemize}

\section{Przegląd modelu przypadków użycia}
W opisach przypadków użycia literka \emph{U} oznacza reakcję z strony użytkownika, a literka \emph{S} reakcję ze strony systemu.

\subsection{Ze strony gościa serwisu}
\subsubsection*{Przypadek 1 (filmy)}
\begin{enumerate}
 \item U: wejście na stronę internetowej aplikacji
 \item S: generowanie strony. Przedstawione zostaje menu, w którym można wybrać interesujące kategorie.
 \item U: wybranie kategori \emph{filmy}
 \item S: wypisanie listy filmów dostępnych w kinie wraz z tytułem, opisem, informacją o reżyserze, gatunku, czasem trawania filmu, kategorią wiekową, a także datą premiery.
\end{enumerate}

\subsubsection*{Przypadek 2 (wydarzenia)}
\begin{enumerate}
 \item U: wejście na stronę internetowej aplikacji
 \item S: generowanie strony. Przedstawione zostaje menu, w którym można wybrać interesujące kategorie.
 \item U: wybranie kategori \emph{wydarzenia}
 \item S: wypisanie listy wydarzeń, jakie mają miejsce w kinie wraz z nazwą, opisem, informacją o dacie wydarzenia, dostępnych miejscach i ilością osób zapisanych na dane wydarzenie.
\end{enumerate}

\subsubsection*{Przypadek 3 (repertuar)}
\begin{enumerate}
 \item U: wejście na stronę internetowej aplikacji
 \item S: generowanie strony. Przedstawione zostaje menu, w którym można wybrać interesujące kategorie.
 \item U: wybranie kategori \emph{repertuar}
 \item S: wypisanie listy seansów wraz z informacją o tytule filmu, numerze sali, dacie i cenie.
\end{enumerate}

\subsubsection*{Przypadek 4 (rejestracja)}
\begin{enumerate}
 \item U: wejście na stronę internetowej aplikacji
 \item S: generowanie strony. Przedstawione zostaje menu, w którym można wybrać interesujące kategorie.
 \item U: wybranie kategori \emph{zaloguj się}
 \item S: wypisanie formularzu logowania wraz z przyciskiem do rejestracji.
 \item U: kliknięcie na przycisk rejestracji
 \item S: wyświetlenie formularzu rejestracji z polami: \emph{imię}, \emph{nazwisko}, \emph{email}, \emph{nr telefonu}, \emph{login}, \emph{hasło}, \emph{data urodzenia}, a także przyciskiem \emph{zarejestruj konto}.
 \item U: wypełnienie formularza i przyciśnięcie przycisku \emph{zarejestruj konto}
 \item S: informacja o udanym przebiegu rejestracji lub informacja o błędzie, jeśli taki zaistanieje (np. niepoprawny adres e-mail).
\end{enumerate}

\subsubsection*{Przypadek 5 (logowanie)}
\begin{enumerate}
 \item U: wejście na stronę internetowej aplikacji
 \item S: generowanie strony. Przedstawione zostaje menu, w którym można wybrać interesujące kategorie.
 \item U: wybranie kategori \emph{zaloguj się}
 \item S: wypisanie formularzu logowania wraz z polem do wpisywania loginu i hasła, a także przyciskiem \emph{zaloguj się}.
 \item U: wpisywanie informacji o loginie i haśle. Wciśnięcie przycisku \emph{zaloguj się}
 \item S: wyświetlenie komunikatu o poprawnym logowaniu lub błędzie.
\end{enumerate}


\subsection{Ze strony klienta serwisu}
\subsubsection*{Przypadek 6 (wylogowywanie)}
\begin{enumerate}
 \item U: wejście na stronę internetowej aplikacji
 \item S: generowanie strony. Przedstawione zostaje menu, w którym można wybrać interesujące kategorie.
 \item U: wybranie kategori \emph{wyloguj się}
 \item S: wylogowanie użytkownika. Wypisanie komunikatu o wylogowaniu.
\end{enumerate}

\subsubsection*{Przypadek 7 (zapisywanie się na wydarzenie)}
\begin{enumerate}
 \item U: wejście na stronę internetowej aplikacji
 \item S: generowanie strony. Przedstawione zostaje menu, w którym można wybrać interesujące kategorie.
 \item U: wybranie kategori \emph{wydarzenia}
 \item S: pojawia się lista dostępnych wydarzeń. Przy każdym wydarzeniu znajduje się opcja \emph{zapisz się}.
 \item U: wybranie interesującego wydarzenie i kliknięcie przycisku \emph{zapisz się}
 \item S: wypisanie komunikatu o zapisaniu na wydarzenie
\end{enumerate}

\subsubsection*{Przypadek 8.1 (wypisywanie się z wydarzenia)}
\begin{enumerate}
 \item U: wejście na stronę internetowej aplikacji
 \item S: generowanie strony. Przedstawione zostaje menu, w którym można wybrać interesujące kategorie.
 \item U: wybranie kategori \emph{wydarzenia}
 \item S: pojawia się lista dostępnych wydarzeń. Przy każdym wydarzeniu, na które zapisał się klient istnieje opcja \emph{wypisz się}
 \item U: wybranie wydarzenia, z którego klient chce się wypisać i kliknięcie przycisku \emph{wypisz się}
 \item S: pokazanie komunikatu o wypisaniu się z wybranego wydarzenia.
\end{enumerate}

\subsubsection*{Przypadek 8.2 (wypisywanie się z wydarzenia)}
\begin{enumerate}
 \item U: wejście na stronę internetowej aplikacji
 \item S: generowanie strony. Przedstawione zostaje menu, w którym można wybrać interesujące kategorie.
 \item U: wybranie kategori \emph{twoje zapisy i rezerwacje}
 \item S: pojawia się lista wydarzeń, na które się zapisał klient. Obok każdego wydarzenia istnieje opcja \emph{wypisz się}.
 \item U: wybranie wydarzenia, z którego klient chce się wypisać i kliknięcie przycisku \emph{wypisz się}
 \item S: pokazanie komunikatu o wypisaniu się z wybranego wydarzenia.
\end{enumerate}

\subsubsection*{Przypadek 9 (zapisywanie się na seans)}
\begin{enumerate}
 \item U: wejście na stronę internetowej aplikacji
 \item S: generowanie strony. Przedstawione zostaje menu, w którym można wybrać interesujące kategorie.
 \item U: wybranie kategori \emph{repertuar}
 \item S: pojawia się lista seansów. Obok informacji o seansie istniej opcja \emph{rezerwuj bilety}.
 \item U: wybranie interesującego seansu i kliknięcie przycisku \emph{rezerwuj bilety}.
 \item S: pokazanie układu sali, wraz z wolnymi miejscami, które można zarezerwować.
 \item U: wybranie miejsc, które chce zarezerwować użytkownik i przyciśnięcie przycisku \emph{OK}.
 \item S: wyświetla informację o udanej rezerwacji lub ewentualnych problemach.
\end{enumerate}

\subsubsection*{Przypadek 10 (wypisywanie się z seansu)}
\begin{enumerate}
 \item U: wejście na stronę internetowej aplikacji
 \item S: generowanie strony. Przedstawione zostaje menu, w którym można wybrać interesujące kategorie.
 \item U: wybranie kategori \emph{twoje zapisy i rezerwacje}
 \item S: pojawia się lista seansów, na które zapisał się klient. Obok informacji o seansie istnieje opcja \emph{anuluj rezerwacje}.
 \item U: wybranie zarezerwowanego miejsca i kliknięcie przycisku \emph{anuluj rezerwację}.
 \item S: informacja o anulowaniu rezerwacji.
\end{enumerate}

\subsection{Ze strony kasjera serwisu}
\subsubsection*{Przypadek 11 (akceptowanie rezerwacji na seans)}
\begin{enumerate}
 \item U: wejście na stronę internetowej aplikacji
 \item S: generowanie strony. Przedstawione zostaje menu, w którym można wybrać interesujące kategorie.
 \item U: wybranie kategori \emph{rezerwacje}
 \item S: pojawia się lista wszystkich rezerwacji wraz z opcją \emph{zrealizuj}
 \item U: wybranie interesującej rezerwacji i wciśnięcie przycisku \emph{zreazlizuj}.
 \item S: informacja o pomyślnym wykonaniu czynności.
\end{enumerate}

\subsubsection*{Przypadek 12 (anulowanie rezerwacji na seans)}
\begin{enumerate}
 \item U: wejście na stronę internetowej aplikacji
 \item S: generowanie strony. Przedstawione zostaje menu, w którym można wybrać interesujące kategorie.
 \item U: wybranie kategori \emph{rezerwacje}
 \item S: pojawia się lista wszystkich rezerwacji wraz z opcją \emph{usuń}
 \item U: wybranie rezerwacji i wciśnięcie przycisku \emph{usuń}.
 \item S: informacja o pomyślnym wykonaniu czynności.
\end{enumerate}

\subsubsection*{Przypadek 13 (usuwanie zapisu na wydarzenie)}
\begin{enumerate}
 \item U: wejście na stronę internetowej aplikacji
 \item S: generowanie strony. Przedstawione zostaje menu, w którym można wybrać interesujące kategorie.
 \item U: wybranie kategori \emph{zapisy}
 \item S: pojawia się lista wszystkich dokonanych zapisów wraz z opcją \emph{usuń zapis}
 \item U: wybranie interesującego zapisu i wciśnięcie przycisku \emph{usuń zapis}.
 \item S: informacja o pomyślnym wykonaniu czynności.
\end{enumerate}

\subsection{Ze strony dodawacza}
\subsubsection*{Przypadek 14 (dodawanie filmu)}
\begin{enumerate}
 \item U: wejście na stronę internetowej aplikacji
 \item S: generowanie strony. Przedstawione zostaje menu, w którym można wybrać interesujące kategorie.
 \item U: wybranie kategori \emph{filmy}
 \item S: pojawia się lista filmów, a także przycisk \emph{dodaj film}.
 \item U: wciśnięcie przycisku \emph{dodaj filmy}
 \item S: pojawia się formularz z informacjami o filmie tzn. \emph{tytuł}, \emph{reżyseria}, \emph{gatunek}, \emph{opis}, \emph{kategoria wiekowa}, \emph{czas trwania} i \emph{data premiery}, a także przycisk \emph{dodaj film}
 \item U: wypełnienie formularza i wciśnięcie przycisku \emph{dodaj film}
 \item S: informacja o pomyślnym wykonaniu czynności
\end{enumerate}

\subsubsection*{Przypadek 15 (dodawanie wydarzenia)}
\begin{enumerate}
 \item U: wejście na stronę internetowej aplikacji
 \item S: generowanie strony. Przedstawione zostaje menu, w którym można wybrać interesujące kategorie.
 \item U: wybranie kategori \emph{wydarzenia}
 \item S: pojawia się lista aktualnych wydarzeń, a także przycisk \emph{dodaj wydarzenie}.
 \item U: wciśnięcie przycisku \emph{dodaj wydarzenie}
 \item S: pojawia się formularz z informacjami o wydarzeniu tzn. \emph{nazwa}, \emph{opis}, \emph{data}, \emph{ilość miejsc}, \emph{kategoria wiekowa}.
 \item U: wypełnienie formularza i wciśnięcie przycisku \emph{dodaj wydarzenie}
 \item S: informacja o pomyślnym wykonaniu czynności
\end{enumerate}

\subsubsection*{Przypadek 16 (dodawanie nowego seansu)}
\begin{enumerate}
 \item U: wejście na stronę internetowej aplikacji
 \item S: generowanie strony. Przedstawione zostaje menu, w którym można wybrać interesujące kategorie.
 \item U: wybranie kategori \emph{repertuar}
 \item S: pojawia się lista dostępnych seansów, a także przycisk \emph{dodaj nowy seans}.
 \item U: wciśnięcie przycisku \emph{dodaj nowy seans}
 \item S: pojawia się formularz z informacjami o seansie tzn. \emph{film}, \emph{sala}, \emph{data}, \emph{cena}.
 \item U: wypełnienie formularza i wciśnięcie przycisku \emph{dodaj seans}
 \item S: informacja o pomyślnym wykonaniu czynności
\end{enumerate}

\subsection{Ze strony administratora}
\subsubsection*{Przypadek 16 (nadawanie praw dodawacza)}
\begin{enumerate}
 \item U: wejście na stronę internetowej aplikacji
 \item S: generowanie strony. Przedstawione zostaje menu, w którym można wybrać interesujące kategorie.
 \item U: wybranie kategori \emph{użytkownicy}
 \item S: pojawia się lista użytkowników, obok każdego użytkownika znajduje się przycisk \emph{nadaj uprawnienia dodawacza} lub \emph{usuń uprawnienia dodawacza}.
 \item U: wybranie odpowiedniego użytkownika i wciśnięcie przycisku \emph{nadaj uprawnienia dodawacza}
 \item S: informacja o pomyślnym wykonaniu czynności
\end{enumerate}

\subsubsection*{Przypadek 17 (usuwanie praw dodawacza)}
\begin{enumerate}
 \item U: wejście na stronę internetowej aplikacji
 \item S: generowanie strony. Przedstawione zostaje menu, w którym można wybrać interesujące kategorie.
 \item U: wybranie kategori \emph{użytkownicy}
 \item S: pojawia się lista użytkowników, obok każdego użytkownika znajduje się przycisk \emph{nadaj uprawnienia dodawacza} lub \emph{usuń uprawnienia dodawacza}.
 \item U: wybranie odpowiedniego użytkownika i wciśnięcie przycisku \emph{usuń uprawnienia dodawacza}
 \item S: informacja o pomyślnym wykonaniu czynności
\end{enumerate}

\subsubsection*{Przypadek 18 (nadawanie praw kasjera)}
\begin{enumerate}
 \item U: wejście na stronę internetowej aplikacji
 \item S: generowanie strony. Przedstawione zostaje menu, w którym można wybrać interesujące kategorie.
 \item U: wybranie kategori \emph{użytkownicy}
 \item S: pojawia się lista użytkowników, obok każdego użytkownika znajduje się przycisk \emph{nadaj uprawnienia kasjera} lub \emph{usuń uprawnienia kasjera}.
 \item U: wybranie odpowiedniego użytkownika i wciśnięcie przycisku \emph{nadaj uprawnienia kasjera}
 \item S: informacja o pomyślnym wykonaniu czynności
\end{enumerate}

\subsubsection*{Przypadek 19 (usuwanie praw kasjera)}
\begin{enumerate}
 \item U: wejście na stronę internetowej aplikacji
 \item S: generowanie strony. Przedstawione zostaje menu, w którym można wybrać interesujące kategorie.
 \item U: wybranie kategori \emph{użytkownicy}
 \item S: pojawia się lista użytkowników, obok każdego użytkownika znajduje się przycisk \emph{nadaj uprawnienia kasjera} lub \emph{usuń uprawnienia kasjera}.
 \item U: wybranie odpowiedniego użytkownika i wciśnięcie przycisku \emph{usuń uprawnienia kasjera}
 \item S: informacja o pomyślnym wykonaniu czynności
\end{enumerate}

\input{jacek_part}
\input{pawel_part}

\newpage
\begin{thebibliography}{4}
	\bibitem{testy} 
		Paweł Chwała, Jacek Fiedorowicz, Piotr Kieć, 
		\emph{Scenariusze testowania}.
	\bibitem{gui}
		Paweł Chwała, Jacek Fiedorowicz, Piotr Kieć, 
		\emph{Projekt graficznego interfejsu użytkownika}.
	\bibitem{standardy}
		Paweł Chwała, Jacek Fiedorowicz, Piotr Kieć,
		\emph{Standardy}.
	\bibitem{slownik}
		Paweł Chwała, Jacek Fiedorowicz, Piotr Kieć,
		\emph{Słownik}.
\end{thebibliography}
\end{document} 
